#!/usr/bin/env node
// inquirer：用于向用户提出问题和获取回答
// chalk：改变命令行打印内容的样式
// child_process：用于执行命令行的指令,子进程
// commander：用于定义自己的命令
const inquirer = require('inquirer')
const chalk = require("chalk")
const { exec } = require('child_process')
const fs = require("fs")

chalk.level = 3 // 设置chalk等级为3

const proList = [
    {
        type: 'input', //问题类型
        message: "your projectName:", //问题描述
        name: "projectName",//问题答案对应的属性，用户输入的内容被存储在then方法中第一个参数对应的该属性中
        validate: (val) => {
            if (val === '') {
                return chalk.red('项目名不能为空，请重新输入')
            }
            return true
        },
        default:"zy-pro"
    },
    {
        type: "input",
        message: "version:",
        name: "version",
        validate: (val) => {
            return true
        },
        default:"1.0.0"
    }
]

module.exports = () => {
    inquirer.prompt(proList).then((answer) => {
        console.log(chalk.green('开始初始化文件'))
        console.log(chalk.gray('初始化中...'))
        const gitUrl = 'https://gitee.com/zhangyucoder/food-traceability-system.git'
        exec(`git clone ${gitUrl} ${answer.projectName}`, (err, stdout, stderr) => {
            if (err) {
                console.log(chalk.red(err))
                process.exit()
            }
            fs.readFile(`${process.cwd()}/${answer.projectName}/package.json`, (err, data) => {
                if (err) {
                    console.log(chalk.red('读取文件失败'))
                    process.exit()
                }
                data = JSON.parse(data.toString())
                data.name = answer.projectName
                data.version = answer.version
                fs.writeFile(`${process.cwd()}/${answer.projectName}/package.json`, JSON.stringify(data, '', '\t'), err => {
                    if (err) {
                        console.log(chalk.red('写入文件失败'))
                        process.exit()
                    }
                    console.log(chalk.green('初始化完成'))
                    process.exit() //退出命令操作
                })
            })
        })
    })
}

